RAC環境でのCache Connectの動作
Oracle Real Application Clusters(RAC)では、共有リソース(クラスタウェア共有ディスクに存在するすべてのデータファイル、制御ファイル、PFILEおよびREDOログ・ファイルを含む)を持つ1つのOracleデータベースに複数のOracleインスタンスでアクセスできます。RACでは、高可用性が提供されるとともに、読取り/書込み一貫性およびロード・バランシングが処理されます。
Fast Application Notification(FAN)は、Oracle Database 10gリリース2でOracle Call Interface(OCI)に統合されたRAC機能です。RACおよびFANの詳細は、『Oracle Database Oracle ClusterwareおよびOracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください。FANによって、FANイベントをサブスクライブするアプリケーションに対するクラスタでの変更に関する情報がパブリッシュされます。また、次に示す非効率な動作が排除されます。
Cache Connectでは、FANがない場合、Oracle障害の通知の受信に数分かかる可能性があります。
透過的アプリケーション・フェイルオーバー(TAF)は、障害発生後にアプリケーションを再接続する方法を指定できるOracle Net Servicesの機能です。Cache Connectは、FANと統合されたOCIを使用してOracleイベントの通知を受信します。TAFの詳細は、『Oracle Database Net Services管理者ガイド』を参照してください。OCIアプリケーションでは、次のいずれかのタイプのOracle Netフェイルオーバー機能を使用できます。
- SESSION: ユーザーの接続が失われると、そのユーザー用の新しいセッションが自動的に作成されます。このタイプのフェイルオーバーでは、選択した項目のリカバリは試行されません。
- SELECT: このタイプのフェイルオーバーでは、オープン・カーソルを使用しているユーザーが、障害発生後にそれらのカーソルに対してフェッチを続行できます。
- NONE: これがデフォルトです。フェイルオーバー機能は使用されません。このタイプでは、フェイルオーバーが発生しないように明示的に指定することもできます。
Cache Connectを使用すると、ユーザーの介入なしでOracle障害から迅速にリカバリできます。Cache Connectは、Oracle Database 10gリリース2のサーバーのRAC環境で使用できます。Oracleクライアントは、Oracle9iリリース2またはOracle Database 10gリリース2のいずれでもかまいません。Oracleデータベースのリリースの詳細は、「RAC環境でCache Connectを使用する場合の制限」を参照してください。
Cache Connectの動作は、TAFのアクションおよびTAFの構成方法によって異なります。デフォルトでは、RACCallback Cache Connect属性によってTAFおよびFANコールバックが登録されます。TAFおよびFAN機能が不要な場合は、接続文字列でRACCallbackを0に設定します。
表7.1に、異なるTAFフェイルオーバー・タイプが指定されたRAC環境でのCache Connect機能および処理の動作を示します。これらの動作は、Oracle9i リリース2とOracle Database 10gリリース2のクライアントで同じです。ただし、Oracle Database 10gリリース2では、FANが有効になっている場合にCache Connectでノード障害の通知が即時に受信される点が異なります。
表7.1 RAC環境でのCache Connect機能および処理の動作
機能または処理
|
TAFフェイルオーバー・タイプ
|
Oracleデータベースで接続障害が発生した後のCache Connectの動作
|
自動リフレッシュ | NONE | キャッシュ・エージェントが、自動的に停止して再起動し、Oracleサービスに対して接続が確立できるようになるまで待機します。この動作は、Cache Connect to Oracleリリース6.0.1およびRAC以外の環境でのCache Connectの場合と同様です。 |
自動リフレッシュ | SESSION | 次のいずれかの状態が発生します。
- 障害が発生したすべての接続がリカバリされます。実行中だった自動リフレッシュ処理がロールバックされ、再試行されます。
- TAFがタイムアウトになるか、または接続をリカバリできない場合は、キャッシュ・エージェントが自動的に停止して再起動し、Oracleサービスに対して接続が確立できるようになるまで待機します。この動作は、Cache Connect to Oracleリリース6.0.1およびRAC以外の環境でのCache Connectの場合と同様です。
|
自動リフレッシュ | SELECT | 次のいずれかの状態が発生します。
- 接続障害が発生した時点から自動リフレッシュが再開されます。
- 実行中だった自動リフレッシュ処理がロールバックされ、再試行されます。
- TAFがタイムアウトになるか、または接続をリカバリできない場合は、キャッシュ・エージェントが自動的に停止して再起動し、Oracleサービスに対して接続が確立できるようになるまで待機します。この動作は、Cache Connect to Oracleリリース6.0.1の場合と同様です。
|
パススルー、SWT、伝播およびフラッシュ | NONE | 接続が失われたことがアプリケーションに通知され、アプリケーションでTimesTen接続をロールバックする必要があります。次のパススルー処理中に、Cache ConnectによってOracleデータベースへの再接続が試行されます。変更されたすべてのセッション属性が失われます。この動作は、Cache Connect to Oracleリリース6.0.1およびRAC以外の環境でのCache Connectの場合と同様です。 |
パススルー、SWT、伝播およびフラッシュ | SESSION | 次のいずれかの状態が発生します。
- Oracleデータベースへの接続がリカバリされます。失われた接続でオープン・カーソルがあったり、DML処理またはロック処理が行われていた場合は、エラーが発生するため、ユーザーはトランザクションをロールバックする必要があります。前述の状態でなかった場合は、ロールバックせずに続行できます。
- TAFがタイムアウトになるか、または接続をリカバリできない場合は、接続が失われたことがアプリケーションに通知され、アプリケーションでTimesTen接続をロールバックする必要があります。次のパススルー処理中に、Cache ConnectによってOracleデータベースへの再接続が試行されます。変更されたすべてのセッション属性が失われます。この動作は、Cache Connect to Oracleリリース6.0.1およびRAC以外の環境でのCache Connectの場合と同様です。
|
パススルー | SELECT | Oracleデータベースへの接続がリカバリされます。失われた接続でDML処理またはロック処理が行われていた場合は、エラーが発生するため、ユーザーはトランザクションをロールバックする必要があります。行われていなかった場合は、ロールバックせずに続行できます。 |
SWT、伝播およびフラッシュ | SELECT | 次のいずれかの状態が発生します。
- Oracleデータベースへの接続がリカバリされます。失われた接続でDML処理またはロック処理が行われていた場合は、エラーが発生するため、ユーザーはトランザクションをロールバックする必要があります。行われていなかった場合は、ロールバックせずに続行できます。
- TAFがタイムアウトになるか、または接続をリカバリできない場合は、接続が失われたことがアプリケーションに通知され、アプリケーションでTimesTen接続をロールバックする必要があります。次のパススルー処理中に、Cache ConnectによってOracleデータベースへの再接続が試行されます。変更されたすべてのセッション属性が失われます。この動作は、Cache Connect to Oracleリリース6.0.1およびRAC以外の環境でのCache Connectの場合と同様です。
|
ロードおよびリフレッシュ | NONE | 接続が失われたことを示すエラーがアプリケーションに通知されます。 |
ロードおよびリフレッシュ | SESSION | 次のいずれかの状態が発生します。 |
ロードおよびリフレッシュ | SELECT | 次のいずれかの状態が発生します。
- Oracleカーソルがオープンしていてそのカーソルがリカバリされている場合、またはOracleカーソルがオープンしていない場合は、ロードが正常に行われます。
- TAFがセッションまたはオープンしているOracleカーソルをリカバリできなかった場合は、エラーが返されます。
注意: TAFフェイルオーバー・タイプがSESSIONの場合より、エラーが返される可能性は低くなります。 |
AWT | NONE | AWTのレプリケーション・レシーバ・スレッドが終了します。新しいスレッドが作成され、そのスレッドによってOracleデータベースへの接続が試行されます。 |
AWT | SESSION、SELECT | 次のいずれかの状態が発生します。
- 接続がリカバリされ、コミットされていないDML処理がその接続に存在する場合は、バッチ処理またはトランザクションがロールバックされ、再度実行されます。
- 接続がリカバリされ、コミットされていないDML処理がない場合は、処理が続行されます。
|